/*
点餐模块
 */
const orderingFoodDao = require('../dao/OrderingFoodDao');
const foodTableDao = require('../dao/FoodTableDao');
const db = require('../datasource/DBConnection');

function ff() {
    console.log('预留公共函数');
}

/**
 * 公共函数，输出日志，输出返回前端信息
 * @param resultData   数据库返回数据
 * @param resp         响应对象
 * @param msgStr       返回前端提示文字
 * @param action       判断是否是select查询返回，因为select查询返回会新增data字段(4为select，1为insert，2为delete，3为update，目前除了select单独处理，其余暂时没有做分离)
 * @param data         如果执行的查询，则data传递是查询的结果值，增删改操作，不用传递data对象
 */
function console_Logs_Send(resultData, resp, msgStr, action, data) {
    console.log('OrderingFoodController 数据库返回信息如下:');
    console.log(resultData);
    let json = {};
    // 如果dao层返回500状态，代表失败，如果返回200状态，代表成功
    if(resultData.code === 500)
        json = {code:500, msg:'服务器异常，请稍候重试'};  // 如果出现异常，通过两种情况，1.数据库连接出错，2.数据表结构操作出错
    else {
        if(action === 4)   // 如果action为4，代表查询处理，返回对应的data对象
            json = {code:200, msg:msgStr, data:data};
        else
            json = {code:200, msg:msgStr};
    }
    console.log(json);
    // 响应给前台页面
    resp.send(json);
}

module.exports = {
    async addOrderingFood(req, resp){                                 // 新增点菜(批量处理，一个餐桌，但是会上传多个菜品)
        // 上传格式例如：{food_table_id:1,foods: [{food_id:1,food_count:1,food_count_money:12},{food_id:2,food_count:2,food_count_money:20}]}
        console.log(req.body);
        let json = JSON.stringify(req.body);
        json = JSON.parse(json);
        // console.log(json);
        for(i = 0; i < json.foods.length; i++) {
            // 新增点餐时，默认结账状态为0
            let resultData = await orderingFoodDao.insertOrderingFood(json.food_table_id, json.foods[i].food_id, json.foods[i].food_count, json.foods[i].food_count_money, 0);
        }
        await foodTableDao.updateFoodTableAccountById(0, 1, json.food_table_id);        // 点餐处理，基于餐桌id，修改餐桌状态为使用状态
        resp.send({code:200, msg:'点菜成功'});
    },
    async deleteOrderingFoodById(req, resp){                          // 收银处理 基于主键id 删除 一条记录
        // 上传格式例如：{food_table_id:1,foods: [{food_id:1},{food_id:2}]}
        console.log(req.body);
        let json = JSON.stringify(req.body);
        json = JSON.parse(json);
        // console.log(json);
        for(i = 0; i < json.foods.length; i++) {
            // 新增点餐时，默认结账状态为0
            let resultData = await orderingFoodDao.deleteOrderingFoodById(json.foods[i].food_id, json.food_table_id);
        }
        // 结账时，默认结账状态1， 结账成功，删除所有的指定餐桌的点餐数据
        await foodTableDao.updateFoodTableAccountById(1, 0, json.food_table_id);     // 收银处理，基于餐桌id，修改餐桌状态为闲置状态
        await foodTableDao.updateFoodTableForClearPeoples(json.food_table_id);                                         // 收银处理，根据餐桌id，清除餐桌用户人数
        resp.send({code:200, msg:'收银成功'});
    },
    async updateOrderingFoodById(req, resp){                          // 加菜处理 (批量处理)
        // 上传格式例如：{food_table_id:1,foods: [{food_id:1,food_count:1,food_count_money:12},{food_id:2,food_count:2,food_count_money:20}]}
        console.log(req.body);
        let json = JSON.stringify(req.body);
        json = JSON.parse(json);
        // console.log(json);
        for(i = 0; i < json.foods.length; i++) {
            // 更新指定餐桌的菜品个数及价格，首先查询此餐桌的菜品是否存在，如果存在，则更新，如果不存在，则插入
            let resultData = await orderingFoodDao.selectAllOrderingFoodByDoubleId(json.food_table_id, json.foods[i].food_id);
            // 如果dao层返回500状态，代表失败，如果返回200状态，代表成功
            if(resultData.code === 500)
                json = {code:500, msg:'服务器异常，请稍候重试'};  // 如果出现异常，通过两种情况，1.数据库连接出错，2.数据表结构操作出错
            else {
                if(resultData.data.length===0)   // 如果返回的数据存在，则执行更新，否则执行新增
                    resultData = await orderingFoodDao.insertOrderingFood(json.food_table_id, json.foods[i].food_id, json.foods[i].food_count, json.foods[i].food_count_money, 0);
                else
                    resultData = await orderingFoodDao.updateOrderingFoodById(json.food_table_id, json.foods[i].food_id, json.foods[i].food_count, json.foods[i].food_count_money);
            }
        }
        resp.send({code:200, msg:'加菜成功'});
    },
    async selectAllOrderingFood(req, resp){                          // 查询所有
        let resultData = await orderingFoodDao.selectAllOrderingFood();
        console_Logs_Send(resultData, resp, '查询数据成功', 4, resultData.data);
    },
    async selectOrderingFoodCount(req, resp){                          // 根据用户传递模糊名称进行统计个数
        let resultData = await orderingFoodDao.selectOrderingFoodCount(req.query.food_name);
        console_Logs_Send(resultData, resp, '查询个数成功', 4, resultData.data[0]['count(*)']);
    },
    async selectOrderingFoodById(req, resp){                          // 基于一个餐桌号查询一条记录
        let resultData = await orderingFoodDao.selectOrderingFoodById(req.query.food_table_number);
        console_Logs_Send(resultData, resp, '查询数据成功', 4, resultData.data);
    },
    async selectOrderingFoodByLimit(req, resp){                       // 基于页码进行分页处理
        let page = req.body.page;                                    // 获取页码
        let startIndex = (page - 1) * 10;                            // 计算起始显示下标， 默认每页显示10条
        let resultData = await orderingFoodDao.selectOrderingFoodByLimit(startIndex);
        console_Logs_Send(resultData, resp, '查询数据成功', 4, resultData.data);
    }
};

